#ifndef CRC_H
#define CRC_H

#include <stdbool.h>
#include <stdint.h>

/*
**********************************************************************************************************************
* Includes
**********************************************************************************************************************
*/

#include "Crc_Cfg.h" /* Configuration file */

/*
**********************************************************************************************************************
* Defines/Macros
**********************************************************************************************************************
*/

/*
**********************************************************************************************************************
* Type definitions
**********************************************************************************************************************
*/

/*
**********************************************************************************************************************
* Variables
**********************************************************************************************************************
*/

/*
**********************************************************************************************************************
* Extern declarations
**********************************************************************************************************************
*/

/*
 **********************************************************************************************************************
 * Prototypes
 **********************************************************************************************************************
 */

extern uint8_t Crc_CalculateCRC8(const uint8_t* Crc_DataPtr,
                                 uint32_t Crc_Length, uint8_t Crc_StartValue8,
                                 bool Crc_IsFirstCall);
extern uint8_t Crc_CalculateCRC8H2F(const uint8_t* Crc_DataPtr,
                                    uint32_t Crc_Length,
                                    uint8_t Crc_StartValue8,
                                    bool Crc_IsFirstCall);
extern uint16_t Crc_CalculateCRC16(const uint8_t* Crc_DataPtr,
                                   uint32_t Crc_Length,
                                   uint16_t Crc_StartValue16,
                                   bool Crc_IsFirstCall);
extern uint32_t Crc_CalculateCRC32(const uint8_t* Crc_DataPtr,
                                   uint32_t Crc_Length,
                                   uint32_t Crc_StartValue32,
                                   bool Crc_IsFirstCall);
extern uint32_t Crc_CalculateCRC32P4(const uint8_t* Crc_DataPtr,
                                     uint32_t Crc_Length,
                                     uint32_t Crc_StartValue32,
                                     bool Crc_IsFirstCall);

#endif /* CRC_H */
